package com.gitee.feizns.dynamic;

import java.util.Collection;
import java.util.function.Predicate;

/**
 * 集合操作工具类
 * @author feizns
 * @since 2019/10/18
 */
public abstract class CollectionUtils {

    /**
     * 在容器中查找匹配条件的元素
     * @param collection {@link Collection}
     * @param test {@link Predicate}
     * @param <T> 集合类型
     * @return 匹配条件的第一个下标
     */
    public static <T> T find(Collection<T> collection, Predicate<T> test) {
        return collection != null ? IteratorUtils.find(collection.iterator(), test) : null;
    }

    /**
     * 在容器中查找匹配条件元素的位置
     * @param collection {@link Collection}
     * @param test {@link Predicate}
     * @param <T> 集合类型
     * @return 匹配条件的第一个下标
     */
    public static <T> int indexOf(Collection<T> collection, Predicate<T> test) {
        return collection != null ? IteratorUtils.indexOf(collection.iterator(), test) : -1;
    }

    /**
     * 判断列表中是否包含匹配条件的元素
     * @param collection {@link Collection}
     * @param test {@link Predicate}
     * @param <T> 集合类型
     * @return 匹配条件的第一个下标
     */
    public static <T> boolean include(Collection<T> collection, Predicate<T> test) {
        return indexOf(collection, test) != -1;
    }

    /**
     * 判断列表中是否包含匹配条件的元素
     * @param collection {@link Collection}
     * @param test 测试条件
     * @param <T> 集合类型
     * @return 匹配条件的第一个下标
     */
    public static <T> boolean contains(Collection<T> collection, Predicate<T> test) {
        return include(collection, test);
    }

}
